home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_2
/
hexatom2
< prev
next >
Wrap
Text File
|
1995-03-31
|
12KB
|
332 lines
Article 1103 of comp.sys.handhelds:
Path: en.ecn.purdue.edu!noose.ecn.purdue.edu!samsung!sdd.hp.com!decwrl!shelby!bloom-beacon!eru!luth!sunic!mcsun!hp4nl!charon!cwi.nl
From: jurjen@cwi.nl (Jurjen NE Bos)
Newsgroups: comp.sys.handhelds
Subject: New version of HEXATOM game for HP48SX
Keywords: game
Message-ID: <2012@charon.cwi.nl>
Date: 27 Aug 90 08:12:22 GMT
Sender: news@cwi.nl
Organization: STORC, Veldhoven
Lines: 317
I had a vary fruitful discussion with Ian Frechett, giving me some ideas to
improve the game. Here is the result. I made the following improvements:
- You can mark atoms on the display that you think you know.
- Cheating is impossible: after you saw the atoms, you get a count of right
and wrong guessed atoms.
- You can see the last move even if you are typing in the next one.
- The number of atoms is visible in the upper left corner.
- The input routine is improved.
- Strings with a line-feed in the will download without problems.
For people who don't know the game yet, here an introduction:
Here is the game HEXATOM for the HP48SX. If you never heard about it, that's
OK, because I invented it a few years ago with a friend.
It looks a little bit like the game "Black Box" (trademark of ?).
The rules are as follows:
There is a board consisting of 50 hexagons. In those hexagons, there
is a number of atoms hidden by your opponenent (in this case, the calculator).
You must try to find the atoms by sending light rays through the grid.
You can send a light ray from any side of the board, so that there are six
directions.
A light ray is absorbed if it runs into an atom, and it bounces off if it
comes close to an atom:
_ _ _ _ _ _ _ _
_/ \_/ \_/ \_/ \_ _/ \_/ \_/ \_/ \_
\_/ \_/*\_/ \_/ \_/ \_/*\_/ \_/
_/ \_/.\_/ \_/ \_ _/ \_/ \_/ \_/ \_
\_/.\_/ \_/ \_/ \_/ \_/.\_/ \_/
_/.\_/ \_/ \_/ \_ _/ \_/.\_/.\_/ \_
.\_/ \_/ \_/ \_/ \_/.\_/ \_/.\_/
_/ \_/ \_/ \_/ \_ _/.\_/ \_/ \_/.\_
\_/ \_/ \_/ \_/ .\_/ \_/ \_/ \_/.
Absorbed by an atom Reflected
A move is done by sending a light ray. As reply you get the edge of the board
at which the ray left the board, and "---" if it is absorbed.
Watch out for combinations like this:
_ _ _ _ _ _ _ _
_/ \_/*\_/ \_/ \_ _/ \_/ \_/ \_/ \_
\_/ \_/ \_/ \_/ \_/ \_/*\_/ \_/
_/ \_/.\_/ \_/ \_ _/ \_/ \_/*\_/ \_
\_/.\_/*\_/ \_/ \_/ \_/.\_/ \_/
_/.\_/ \_/ \_/ \_ _/ \_/.\_/ \_/ \_
.\_/ \_/ \_/ \_/ \_/.\_/.\_/ \_/
_/ \_/ \_/ \_/ \_ _/.\_/ \_/ \_/ \_
\_/ \_/ \_/ \_/ .\_/ \_/.\_/ \_/
Absorbed by two atoms Double reflection
There is also a triple reflection, which in effect reverses the ray.
The game is started by pressing PLAY (the first variable), and then
entering the number of atoms you like. It gets harder with more atoms,
of course. I recommend using 2 (boring) to 10 (almost impossible) atoms.
The program draws a board on the screen, with the atoms hidden.
You now have the following options:
1-5 selects a row of tiles (rather wiggly)
A-J selects a column of tiles
S-X selects a side of the tile where the ray will enter the board
Backspace erases the selection
ENTER sends a ray, and tells you the entry and exit position of the ray.
* shows where the atoms are. Press any key to exit the game.
+ enters a guessed atom at the selected location. To remove a location,
just select it again and press + again.
(blue) OFF turns the calculator off in the middle of a game. Convenient as
boss key :-) .
If the game is over, the calculator computes the number of guessed atoms
that are on the correct and incorrect positions. It also gives the number
of moves and the number of hidden atoms.
Some remarks:
- I had a nice idea to get the large GROB to donwload without
problems. Probably at lot of people thought of this, but it is
handy.
- The routine CHECK is nominated for the obfuscated RPL contest.
- I like to have the routine SCAN as fast as possible. Does someone already
have the right SYSEVALs handy? Please contact me if you do. Saves
me a lot of time.
Happy playing!
@HEXATOM written by Jurjen N.E. Bos
@Revised version
@August, 1990
%%HP: T(3)A(R)F(,);
DIR
PLAY
\<< INIT
WHILE 1
REPEAT DRM 0 WAIT
IF DUP 51,1 \=/
THEN UNMARK
END
CASE DUP 20 <
THEN IP 10 - 2 setm
END DUP 25 <
THEN IP 14 - 2 setm
END DUP 40 \>= OVER 50 < AND
THEN IP 40 - 3 setm
END { 82,1 83,1 84,1 72,1 73,1 } OVER POS DUP
THEN 1 setm DROP
END DROP { 51,1 55,1 91,3 95,1 75,1 } SWAP POS DUP
THEN { enter clear OFF guess gmov } SWAP GET EVAL
END BOOP
END
END
\>>
NM 0
GL { }
AL { }
LM { }
ML { }
INIT
\<< FIELD PICT STO { } 'ML' STO 0 'NM' STO
{ 5 1 6 } 'LM' STO { } 'GL' STO
"HEXATOM by Jurjen Bos\010number of atoms:" { "5" { -1 1 } V }
INPUT OBJ\-> PICT (-6;68) 3 PICK 1 \->GROB REPL { }
DO RAND 5 * IP 1 + RAND 10 * IP 1 + L\->C
IF DUP2 POS
THEN DROP
ELSE +
END
UNTIL DUP2 SIZE \<=
END 'AL' STO DROP { # 0h # 0h } PVIEW
\>>
setm
\<< 'LM' SWAP ROT PUT
IF LM LIST\-> DROP ROT NOT AND AND
THEN
IF LM 1 5 PUT CHECK LM 1 1 PUT CHECK OVER XOR
THEN 4 * 1 + 'LM' 1 ROT PUT
ELSE DROP
END
END
IF LM LIST\-> DROP SWAP NOT AND AND
THEN
IF LM 2 10 PUT CHECK LM 2 1 PUT CHECK OVER XOR
THEN 9 * 1 + 'LM' 2 ROT PUT
ELSE DROP
END
END PICT (104;68) LM LIST\-> DROP ROT
IF DUP NOT
THEN DROP " "
END ROT
IF DUP
THEN 64 + CHR
ELSE DROP " "
END + SWAP
IF DUP
THEN 82 + CHR
ELSE DROP " "
END + 2 \->GROB REPL
\>>
enter
\<<
IF
IF LM LIST\-> DROP AND AND
THEN LM CHECK
ELSE 0
END
THEN PICT (112;57) 'NM' INCR 1 \->GROB REPL
PICT (82;51) PICT (104;68) (120;62) SUB REPL
IF SCAN
THEN "---"
ELSE DUP MARK LIST\-> DROP SWAP 64 + CHR SWAP 82 + CHR + +
END 2 \->GROB PICT (108;51) ROT REPL clear
ELSE UNMARK BOOP
END
\>>
guess
\<< LM LIST\-> DROP
IF NOT AND AND
THEN PICT LM LIST\-> DROP2 L\->C 'GL' OVER STOT (-1;1) +
GROB 3 3 207020 GXOR clear
ELSE BOOP
END
\>>
SCAN
\<< LM LIST\-> DROP dirs SWAP 6
START LIST\-> ROLLD 6 \->LIST
NEXT ROT ROT L\->C
WHILE AL OVER POS NOT OVER
C\->R DUP 5 > SWAP 55 \<= AND OVER 0 > AND SWAP 70 \<= AND AND
REPEAT SWAP
CASE DUP2 2 GET + AL SWAP POS
THEN
DO LIST\-> ROLLD 6 \->LIST
UNTIL DUP2 2 GET + AL SWAP POS NOT
END
END DUP2 6 GET + AL SWAP POS
THEN
DO LIST\-> ROLL 6 \->LIST
UNTIL DUP2 6 GET + AL SWAP POS NOT
END
END
END SWAP OVER 1 GET +
END
IF AL OVER POS
THEN DROP2 1
ELSE SWAP 4 GET SWAP OVER + C\->R 10 / IP SWAP 7 /
ROT dirs SWAP POS 3 \->LIST 0
END
\>>
gmov
\<< 1 AL SIZE
FOR I PICT AL I GET (-2;2) + GROB 5 5 E0111111E0 GOR
NEXT PICT (87;68) # 22h # 7h BLANK REPL 0 WAIT
DROP AL SIZE Atoms \->TAG NM "Moves" \->TAG 0 0 1 GL SIZE
IF DUP2 \<=
THEN
FOR a
IF AL GL a GET POS
THEN 1 +
ELSE SWAP 1 + SWAP
END
NEXT
ELSE DROP2
END Right \->TAG SWAP Wrong \->TAG "Game over\010Your score:" DOERR
\>>
clear
\<< { 0 0 0 } 'LM' STO PICT (104;68) GROB 17 7 0 REPL
\>>
DRM
\<<
IF
IF LM LIST\-> DROP AND AND
THEN LM CHECK
ELSE LM LIST\-> DROP NOT AND AND
END
THEN LM MARK
END
\>>
CHECK
\<< LIST\-> DROP { 0 DROP 5 10 AND 5 10 > 1 0 DROP 1 1 > 1 1 AND 5 }
SWAP 3 * DUP 2 - SWAP SUB LIST\-> DROP 5 ROLL == 4 PICK 2 MOD ROT
EVAL ROT ROT == OR
\>>
MARK
\<< LIST\-> DROP
IF DUP
THEN dirs SWAP GET -2 /
END ROT ROT L\->C + (-1;1) + 'ML' OVER STO+ PICT SWAP
GROB 3 3 705070 GXOR
\>>
UNMARK
\<< 1 ML SIZE
IF DUP2 \<=
THEN
FOR I PICT ML I GET GROB 3 3 705070 GXOR
NEXT { } 'ML' STO
ELSE DROP2
END
\>>
L\->C
\<< DUP 7 * SWAP 2 MOD 2 / ROT + 10 * R\->C
\>>
STOT
\<<
IF OVER RCL OVER POS
THEN OVER RCL DUP ROT POS DUP2 1 SWAP 1 - SUB
ROT ROT 1 + OVER SIZE SUB + SWAP STO
ELSE STO+
END
\>>
BOOP
\<< 335 ,07 BEEP
\>>
FIELD
\<< "GROB 128 64 "
"0007C3C178FC7C111704000E000C7E4400884422980402211204000400640154" +
"008844201904020112040004C36C3192008FC320197C320F1204000444004F11" +
"0088442019040231124400044460419200884422980402211244000444644154" +
"0088C3C178F40C311783000E4408315400000000000000000000000000000000" +
"008F00E308F00E308F0000000000000000401014040101404010000000000000" +
"00401014040101404010000000000000F12028080202808020200002272A7800" +
"102028080202808020200006B82A04141010C700F10C700F10C7000AA82A3410" +
"F02028080202808020280002A849041401202808020280802028000227887800" +
"0140101404010140401010000000000001401014040101404010100000000000" +
"118F00E308F00E308F00200000020000E0401014040101404010100000040000" +
"004010140401014040101000008F000080202808020280802028000000040000" +
"C0202808020280802028000000020000A010C700F10C700F10C7000000000000" +
"90202808020280802028000000000000F1202808020280802028000000000000" +
"8040101404010140401010000000000080401014040101404010100000000000" +
"808F00E308F00E308F00200000C1000080401014040101404010100000220000" +
"00401014040101404010100000200000E0202808020280802028000000C10000" +
"112028080202808020280000000200000110C700F10C700F10C700002222E300" +
"01202808020280802028000022C18000E0202808020280802028000041008000" +
"01401014040101404010100080E3800001401014040101404010100041148000" +
"118F00E308F00E308F00200022148000E040101404010140401010002A088000" +
"00401014040101404010100008080000E0202808020280802028000004001000" +
"112028080202808020280000080800001110C700F10C700F10C700002A082200" +
"8020280802028080202800002214220040202808020280802028000022142200" +
"204010140401014040101000A2E32200104010140401014040101000A2002200" +
"108F00E308F00E308F00200063222200F140101404010140401010002222C100" +
"0040101404010140401010000022000040202808020280802028000000410000" +
"602028080202808020280000004100004010C700F10C700F10C7000000800000" +
"4020280802028080202800000080000040202808020280802028000000000000" +
"4040101404010140401010000000000040401014040101404010144000080000" +
"408F00E308F00E308F00244000080000E0001014040101404010144E44EC17E6" +
"000010140401014040101C719209882900002808020280802028044F11E98829" +
"0000280802028080202804418219A8290000C700F10C700F10C7044E44E11729" +
OBJ\-> DUP 'FIELD' STO
\>>
dirs { (0;-10) (-7;-5) (-7;5) (0;10) (7;5) (7;-5) }
PPAR { (-6;5) (124;68) X 0 (0;0) FUNCTION Y }
END
* Software like this is distrubuted freely on STORC meetings. If you're *
* Dutch, and have a 28C, 28S or 48SX, and like to receive STORC *
* newsletter and join our meetings, contact STORC, *
* Christ van Willegen, Dordognelaan 45, 5627 HB Eindhoven, Netherlands. *
--
| | "Never imagine yourself not to be otherwise than what |
| Jurjen N.E. Bos | it might appear to others that what you were or might |
| | have been was not otherwise than what you had been |
| jurjen@cwi.nl | would have appeared to them to be otherwise." |